package com.gpstracking.BE;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Usuario entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "usuario", catalog = "gpstracking")
public class Usuario implements java.io.Serializable {

	// Fields

	private Integer idUsuario;
	private String usuario;
	private String clave;
	private String email;
	private Date fechaNac;
	private Set<Ruta> rutas = new HashSet<Ruta>(0);
	private Set<Area> areas = new HashSet<Area>(0);
	private Set<Serviciousuario> serviciousuarios = new HashSet<Serviciousuario>(
			0);
	private Set<Notificacion> notificacions = new HashSet<Notificacion>(0);
	private Set<Dispositivo> dispositivos = new HashSet<Dispositivo>(0);
	private Set<Evento> eventos = new HashSet<Evento>(0);
	private Set<Condicion> condicions = new HashSet<Condicion>(0);

	// Constructors

	/** default constructor */
	public Usuario() {
	}

	/** minimal constructor */
	public Usuario(Integer idUsuario, String usuario, String clave,
			String email, Date fechaNac) {
		this.idUsuario = idUsuario;
		this.usuario = usuario;
		this.clave = clave;
		this.email = email;
		this.fechaNac = fechaNac;
	}

	/** full constructor */
	public Usuario(Integer idUsuario, String usuario, String clave,
			String email, Date fechaNac, Set<Ruta> rutas, Set<Area> areas,
			Set<Serviciousuario> serviciousuarios,
			Set<Notificacion> notificacions, Set<Dispositivo> dispositivos,
			Set<Evento> eventos, Set<Condicion> condicions) {
		this.idUsuario = idUsuario;
		this.usuario = usuario;
		this.clave = clave;
		this.email = email;
		this.fechaNac = fechaNac;
		this.rutas = rutas;
		this.areas = areas;
		this.serviciousuarios = serviciousuarios;
		this.notificacions = notificacions;
		this.dispositivos = dispositivos;
		this.eventos = eventos;
		this.condicions = condicions;
	}

	// Property accessors
	@Id
	@Column(name = "idUsuario", unique = true, nullable = false)
	public Integer getIdUsuario() {
		return this.idUsuario;
	}

	public void setIdUsuario(Integer idUsuario) {
		this.idUsuario = idUsuario;
	}

	@Column(name = "Usuario", nullable = false, length = 45)
	public String getUsuario() {
		return this.usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	@Column(name = "Clave", nullable = false, length = 45)
	public String getClave() {
		return this.clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}

	@Column(name = "Email", nullable = false, length = 150)
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "FechaNac", nullable = false, length = 10)
	public Date getFechaNac() {
		return this.fechaNac;
	}

	public void setFechaNac(Date fechaNac) {
		this.fechaNac = fechaNac;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Ruta> getRutas() {
		return this.rutas;
	}

	public void setRutas(Set<Ruta> rutas) {
		this.rutas = rutas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Area> getAreas() {
		return this.areas;
	}

	public void setAreas(Set<Area> areas) {
		this.areas = areas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Serviciousuario> getServiciousuarios() {
		return this.serviciousuarios;
	}

	public void setServiciousuarios(Set<Serviciousuario> serviciousuarios) {
		this.serviciousuarios = serviciousuarios;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Notificacion> getNotificacions() {
		return this.notificacions;
	}

	public void setNotificacions(Set<Notificacion> notificacions) {
		this.notificacions = notificacions;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Dispositivo> getDispositivos() {
		return this.dispositivos;
	}

	public void setDispositivos(Set<Dispositivo> dispositivos) {
		this.dispositivos = dispositivos;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Evento> getEventos() {
		return this.eventos;
	}

	public void setEventos(Set<Evento> eventos) {
		this.eventos = eventos;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuario")
	public Set<Condicion> getCondicions() {
		return this.condicions;
	}

	public void setCondicions(Set<Condicion> condicions) {
		this.condicions = condicions;
	}

}